home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / GFA basic training.adf / Requester / QUIZ.LST < prev    next >
File List  |  1989-06-01  |  8KB  |  296 lines

  1. @strings
  2. @quiz
  3. PROCEDURE quiz
  4.   REPEAT
  5.     CLS
  6.     IF alt
  7.       menge=RAND(PRED(g_menge&))+1
  8.       frage$="Welche Städte liegen in "+menge$(menge)
  9.       @auswahl_box(200,50,g_menge&*t_menge&,frage$,teil$())
  10.       @werte_aus
  11.     ELSE
  12.       teil=RAND(g_menge&*t_menge&)+1
  13.       frage$="In welchem Bundesland liegt "+teil$(teil)
  14.       @auswahl_box(200,50,g_menge&,frage$,menge$())
  15.       @werte_aus
  16.     ENDIF
  17.     DO
  18.       w$=INKEY$
  19.       EXIT IF NOT w$="" AND MOUSEK=0
  20.     LOOP
  21.   UNTIL ASC(w$)=27
  22. RETURN
  23. PROCEDURE strings
  24.   g_menge&=7   !7 Bundesländer
  25.   t_menge&=10  !mit je 10 Städten
  26.   DIM menge$(g_menge&),teil$(g_menge&*t_menge&),t_rang%(g_menge&*t_menge&),m_rang%(g_menge&)
  27.   FOR j=1 TO g_menge&
  28.     m_rang%(j)=j
  29.     READ menge$(j)
  30.     FOR k=1 TO t_menge&
  31.       INC zÄhler
  32.       t_rang%(zÄhler)=zÄhler
  33.       READ teil$(zÄhler)
  34.     NEXT k
  35.   NEXT j
  36.   SSORT teil$(+),g_menge&*t_menge&,t_rang%()
  37.   SSORT menge$(+),g_menge&,m_rang%()
  38.   '
  39.   DATA Nordrhein-Westfalen
  40.   DATA Aachen,Recklinghausen,Düsseldorf,Essen,Bielefeld
  41.   DATA Köln,Bonn,Leverkusen,Gelsenkirchen,Herne
  42.   '
  43.   DATA Bayern
  44.   DATA Augsburg,Fürth,München,Nürnberg,Regensburg
  45.   DATA Würzburg,Füssen,Rießersee,Landshut,Rosenheim
  46.   '
  47.   DATA Baden-Württemberg
  48.   DATA Baden-Baden,Freiburg,Heidelberg,Heilbronn,Karlsruhe
  49.   DATA Mannheim,Pforzheim,Stuttgart,Ulm,Herzogenaurach
  50.   '
  51.   DATA Hessen
  52.   DATA Darmstadt,Frankfurt,Kassel,Offenbach,Wiesbaden
  53.   DATA Bensheim,Fulda,Gießen,Hanau,Rodgau
  54.   '
  55.   DATA Schleswig-Holstein
  56.   DATA Flensburg,Kiel,Lübeck,Elmshofen,Itzehoe
  57.   DATA Neumünster,Norderstedt,Pinneberg,Rendsburg,Wedel
  58.   '
  59.   DATA Niedersachsen
  60.   DATA Braunschweig,Hannover,Oldenburg,Osnabrück,Salzgitter
  61.   DATA Wihelmshaven,Wolfsburg,Wolfenbüttel,Hameln,Peine
  62.   '
  63.   DATA Rheinland-Pfalz
  64.   DATA Kaiserslautern,Koblenz,Ludwigshafen,Mainz,Trier
  65.   DATA Bad Kreuznach,Pirmasens,Zweibrücken,Worms,Landau
  66. RETURN
  67. PROCEDURE werte_aus
  68.   IF alt
  69.     alt=0
  70.     FOR i=1 TO g_menge&*t_menge&
  71.       IF NOT a!(i)
  72.         IF t_rang%(i)>PRED(m_rang%(menge))*t_menge& AND t_rang%(i)<=PRED(m_rang%(menge))*t_menge&+t_menge&
  73.           INC punkte|
  74.         ENDIF
  75.       ENDIF
  76.     NEXT i
  77.     CLS
  78.     SELECT punkte|
  79.     CASE 0
  80.       antwort$="Sie haben keine Stadt richtig zugeordnet!"
  81.     CASE 1
  82.       antwort$="Sie haben eine Stadt richtig zugeordnet!"
  83.     CASE 2 TO 10
  84.       antwort$="Sie haben "+STR$(punkte|)+" Städte richtig zugeordnet!"
  85.     ENDSELECT
  86.     zentr|=40-LEN(antwort$)/2
  87.     PRINT AT(zentr|,5);antwort$
  88.     punkte|=0
  89.   ELSE
  90.     alt=1
  91.     CLS
  92.     test=1
  93.     WHILE a!(test) AND test<g_menge&
  94.       INC test
  95.     WEND
  96.     IF m_rang%(test)<>SUCC(INT(PRED(t_rang%(teil))/t_menge&))
  97.       test=1
  98.       WHILE m_rang%(test)<>SUCC(INT(PRED(t_rang%(teil))/t_menge&))
  99.         INC test
  100.       WEND
  101.       antwort$="Falsch, "+teil$(teil)+" liegt in "+menge$(test)
  102.       zentr|=40-LEN(antwort$)/2
  103.       PRINT AT(zentr|,5);antwort$
  104.     ELSE
  105.       zentr|=40-LEN("Richtig!")/2
  106.       PRINT AT(zentr|,5);"Richtig!"
  107.     ENDIF
  108.   ENDIF
  109.   ERASE a!()
  110. RETURN
  111. '
  112. PROCEDURE auswahl_box(x&,y|,n|,u$,VAR wahl$())
  113.   LOCAL hintergrund$,teil$,taste$,ok!,revers!,markiert!,ende!,m$
  114.   LOCAL b&,p&,l&,re&,taste&,ma|,i|,l|,erster|,l1|,l2|
  115.   LOCAL l3|,l4|,eintrag|,nummer|,revers|,richtung|
  116.   '
  117.   DIM a!(n|)
  118.   ARRAYFILL a!(),TRUE
  119.   ok!=FALSE
  120.   revers!=FALSE
  121.   markiert!=TRUE
  122.   DEFFILL 1
  123.   '
  124.   ma|=LEN(u$)
  125.   FOR i|=1 TO n|
  126.     ma|=MAX(ma|,LEN(wahl$(i|)))
  127.   NEXT i|
  128.   '
  129.   IF n|>10
  130.     l|=120
  131.   ELSE
  132.     l|=(n|*12)
  133.   ENDIF
  134.   '
  135.   b&=SUCC(INT(MAX((ma|*8)+30,156)/10))*10
  136.   GET x&,y|,x&+b&+1,y|+l|+37,hintergrund$
  137.   COLOR 0
  138.   PBOX x&,y|,x&+b&,y|+l|+36
  139.   COLOR 1
  140.   INC x&
  141.   INC y|
  142.   BOX x&,y|,x&+b&,y|+12
  143.   mittig|=LEN(u$)*4
  144.   TEXT x&+b&/2-mittig|,y|+9,u$
  145.   BOX x&,y|+12,x&+b&,y|+23
  146.   '
  147.   BOX x&,y|+23,x&+b&,y|+23+l|
  148.   BOX x&,y|+23+l|,x&+b&,y|+34+l|
  149.   IF n|>10
  150.     i|=y|+l|+28
  151.     LINE x&+2,i|,x&+6,i|+4
  152.     LINE x&+6,i|+4,x&+10,i|
  153.     LINE x&+3,i|-4,x&+3,i|
  154.     LINE x&+3,i|-4,x&+9,i|-4
  155.     LINE x&+9,i|-4,x&+9,i|
  156.     '
  157.     LINE x&+2,y|+18,x&+6,y|+14
  158.     LINE x&+6,y|+14,x&+10,y|+18
  159.     LINE x&+3,y|+17,x&+3,y|+21
  160.     LINE x&+3,y|+21,x&+9,y|+21
  161.     LINE x&+9,y|+21,x&+9,y|+17
  162.     GET x&+2,y|+14,x&+10,i|+4,m$
  163.     FOR p&=x&+11 TO x&+b& STEP 10
  164.       PUT SUCC(p&),ADD(y|,14),m$
  165.     NEXT p&
  166.   ELSE
  167.     DEFFILL ,3
  168.     FILL x&+3,y|+15
  169.     FILL x&+3,y|+25+l|
  170.   ENDIF
  171.   '
  172.   LINE x&+15,y|+23,x&+15,y|+23+l|
  173.   FOR i|=0 TO MIN(PRED(n|),9)
  174.     TEXT x&+3,y|+31+i|*12,i|
  175.   NEXT i|
  176.   '
  177.   DEC x&
  178.   DEC y|
  179.   BOX x&,y|,x&+b&,y|+l|+36
  180.   '
  181.   FOR l&=y|+23 TO y|+23+l| STEP 12
  182.     LINE x&,l&,x&+b&,l&
  183.   NEXT l&
  184.   FOR i|=1 TO MIN(n|,10)
  185.     TEXT x&+b&/2-(LEN(wahl$(i|))*8)/2,y|+20+i|*12,wahl$(i|)
  186.   NEXT i|
  187.   '
  188.   erster|=1
  189.   re&=x&+b&
  190.   l1|=y|+12
  191.   l2|=l1|+11
  192.   l3|=l2|+l|
  193.   l4|=l3|+11
  194.   REPEAT
  195.     taste$=INKEY$
  196.     IF taste$<>""
  197.       IF LEN(taste$)=1
  198.         taste&=ASC(taste$)
  199.       ELSE
  200.         taste&=ASC(RIGHT$(taste$))
  201.       ENDIF
  202.       SELECT taste&
  203.       CASE 65
  204.         IF erster|<n|-9
  205.           @a_revers(10)
  206.           @a_scroll(1)
  207.         ENDIF
  208.       CASE 66
  209.         IF erster|>1
  210.           @a_revers(10)
  211.           @a_scroll(0)
  212.         ENDIF
  213.       CASE 48 TO 57
  214.         SUB taste&,48
  215.         IF taste&<n|
  216.           IF a!(erster|+taste&)=TRUE
  217.             a!(erster|+taste&)=FALSE
  218.             COLOR 1
  219.             LINE x&+b&-10,y|+30+taste&*12,x&+b&-7,y|+33+taste&*12
  220.             LINE x&+b&-7,y|+33+taste&*12,x&+b&-3,y|+25+taste&*12
  221.           ELSE
  222.             a!(erster|+taste&)=TRUE
  223.             COLOR 0
  224.             LINE x&+b&-10,y|+30+taste&*12,x&+b&-7,y|+33+taste&*12
  225.             LINE x&+b&-7,y|+33+taste&*12,x&+b&-3,y|+25+taste&*12
  226.           ENDIF
  227.         ENDIF
  228.       CASE 13
  229.         ende!=TRUE
  230.       ENDSELECT
  231.       taste$=""
  232.     ENDIF
  233.     '
  234.     IF MOUSEX>x& AND MOUSEX<re& AND MOUSEY>l2| AND MOUSEY<l3| AND MOUSEK<>2
  235.       ' Mauszeiger im Auswahlfeld
  236.       eintrag|=MAX(0,(MOUSEY-y|-24)/12)
  237.       @a_revers(eintrag|)
  238.       IF MOUSEK=1 AND ok!=FALSE
  239.         IF a!(erster|+eintrag|)=TRUE
  240.           a!(erster|+eintrag|)=FALSE
  241.           COLOR 1
  242.           LINE x&+b&-10,y|+30+eintrag|*12,x&+b&-7,y|+33+eintrag|*12
  243.           LINE x&+b&-7,y|+33+eintrag|*12,x&+b&-3,y|+25+eintrag|*12
  244.         ELSE
  245.           a!(erster|+eintrag|)=TRUE
  246.           COLOR 3
  247.           LINE x&+b&-10,y|+30+eintrag|*12,x&+b&-7,y|+33+eintrag|*12
  248.           LINE x&+b&-7,y|+33+eintrag|*12,x&+b&-3,y|+25+eintrag|*12
  249.         ENDIF
  250.       ENDIF
  251.       ok!=MOUSEK
  252.     ELSE
  253.       @a_revers(10)
  254.     ENDIF
  255.     '
  256.     IF MOUSEX>x& AND MOUSEX<re& AND MOUSEY>l1| AND MOUSEY<l2| AND MOUSEK=1 AND erster|<n|-9
  257.       ' Mauszeiger im oberen Scrollfeld
  258.       @a_scroll(1)
  259.     ELSE IF MOUSEX>x& AND MOUSEX<re& AND MOUSEY>l3| AND MOUSEY<l4| AND MOUSEK=1 AND erster|>1
  260.       ' Mauszeiger im unteren Scrollfeld
  261.       @a_scroll(0)
  262.     ENDIF
  263.   UNTIL MOUSEK=2 OR ende!=TRUE
  264.   PUT x&,y|,hintergrund$
  265. RETURN
  266. PROCEDURE a_revers(nummer|)
  267.   IF revers!=TRUE AND revers|<>nummer|        !Revers off
  268.     GET x&+19,y|+25+revers|*12,x&+b&-3,y|+33+revers|*12,revers$
  269.     PUT x&+19,y|+25+revers|*12,revers$,30
  270.     revers!=FALSE
  271.   ELSE IF revers!=FALSE AND nummer|<10        !Revers on
  272.     GET x&+19,y|+25+nummer|*12,x&+b&-3,y|+33+nummer|*12,revers$
  273.     PUT x&+19,y|+25+nummer|*12,revers$,30
  274.     revers!=TRUE
  275.     revers|=nummer|
  276.   ENDIF
  277. RETURN
  278. PROCEDURE a_scroll(richtung|)
  279.   IF richtung|
  280.     INC erster|
  281.   ELSE
  282.     DEC erster|
  283.   ENDIF
  284.   GET x&+17,y|+25+richtung|*12,x&+b&-1,y|+10+l|+richtung|*12,teil$
  285.   PUT x&+17,y|+37-richtung|*12,teil$
  286.   DEFFILL 0
  287.   PBOX x&+18,y|+25+richtung|*108,x&+b&-1,y|+34+richtung|*108
  288.   DEFFILL 1
  289.   TEXT x&+5+b&/2-(LEN(wahl$(erster|+richtung|*9))*8)/2,y|+32+richtung|*108,wahl$(erster|+richtung|*9)
  290.   IF a!(erster|+richtung|*9)=FALSE
  291.     COLOR 1
  292.     LINE x&+b&-10,y|+30+richtung|*108,x&+b&-7,y|+33+richtung|*108
  293.     LINE x&+b&-7,y|+33+richtung|*108,x&+b&-3,y|+25+richtung|*108
  294.   ENDIF
  295. RETURN
  296.